package com.haozhen

/**
  * @author haozhen
  * @email haozh@ync1.com
  * @date 2020/12/8  23:23
  *
  *       3、用户位置时长统计
  *       现有如下数据需要处理： 字段：用户ID，位置ID，开始时间，停留时长（分钟）
  *       4行样例数据： UserA,LocationA,8,60 UserA,LocationA,9,60 UserB,LocationB,10,60 UserB,LocationB,11,80 样例
  *       数据中的数据含义是： 用户UserA，在LocationA位置，从8点开始，停留了60钟
  *       处理要求： 1、对同一个用户，在同一个位置，连续的多条记录进行合并 2、合并原则：开始时间取最早时间，停留
  *       时长累计求和
  */

case class UserInfo(username:String,location:String,startTime:Int,duration:Int)

object UserTimeLong extends App {

  val userInfoList =List(
    UserInfo("userA","locationA",8,60),
    UserInfo("userA","locationA",9,60),
    UserInfo("userB","locationB",11,80),
    UserInfo("userB","locationB",10,60)
  )

  val groupUserInfo = userInfoList.groupBy(user=>s"${user.username}_${user.location}")

  val sortUserInfo = groupUserInfo.mapValues(_.sortBy(_.startTime))

  var firstTime = 0
  val sumUserInfo = sortUserInfo.mapValues(list=>{
    firstTime = list.head.startTime
    list.map(_.duration).sum
  })
  sumUserInfo.foreach{case(k,v)=>println(s"$k,$firstTime,$v")}
}
